package com.answer.model.vo;

import com.answer.entity.App;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.Date;

/**
 * 应用视图
 */
@Data
public class AppVO implements Serializable {

    /**
     * id
     */
    private Long id;

    /**
     * 应用名
     */
    private String appName;

    /**
     * 应用描述
     */
    private String appDesc;

    /**
     * 应用图标
     */
    private String appIcon;

    /**
     * 应用类型（0-得分类，1-测评类）
     */
    private Integer appType;

    /**
     * 评分策略（0-自定义，1-AI）
     */
    private Integer scoringStrategy;

    /**
     * 审核状态：0-待审核, 1-通过, 2-拒绝
     */
    private Integer reviewStatus;

    /**
     * 审核信息
     */
    private String reviewMessage;

    /**
     * 审核人 id
     */
    private Long reviewerId;

    /**
     * 审核时间
     */
    private Date reviewTime;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 创建用户信息
     */
    private UserVO user;

    /**
     * 封装类转对象
     * 将AppVO对象转换为App对象
     * 主要用于将前端传入的AppVO数据转换为后端所需的App对象格式
     *
     * @param appVO AppVO对象，作为转换的源对象
     * @return 返回转换后的App对象如果入参为null，则返回null
     */
    public static App voToObj(AppVO appVO) {
        // 检查入参是否为空，为空则直接返回null，避免空指针异常
        if (appVO == null) {
            return null;
        }
        // 创建App对象实例，用于接收转换后的对象
        App app = new App();
        // 使用BeanUtils工具类进行属性复制，简化代码量，提高效率
        BeanUtils.copyProperties(appVO, app);
        // 返回转换后的App对象
        return app;
    }


    /**
     * 将App对象转换为AppVO封装类
     *
     * 此方法的目的是为了将App实体类对象转换为AppVO，以便在不同的层面上使用数据
     * 它使用Spring的BeanUtils进行属性复制，简化了属性的逐个复制过程
     *
     * @param app 要转换的App对象
     * @return 转换后的AppVO对象如果输入的App对象为null，则返回null
     */
    public static AppVO objToVo(App app) {
        if (app == null) {
            return null;
        }
        AppVO appVO = new AppVO();
        BeanUtils.copyProperties(app, appVO);
        return appVO;
    }

}

